// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV //默认当前选择的环境
})


const db = cloud.database()
// 云函数入口函数

//添加招募
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  const parameter = event.parameter
  if(parameter=='addApplicant'){  //提交招募的申请
    return db.collection('applicant')
    .add({
      data:{
        name : event.name,
        sex:event.sex,
        college:event.college,
        major:event.major,
        studentID:event.studentID,
        telephone:event.telephone,
        email:event.email,
        // recruitState:2,
        enclosure:event.enclosure,
        // recruitClassId:null,
        userId: wxContext.OPENID,
        applicationStatus:0, //申请状态默认为0，0审核中，通过1，不通过2
        recruitId:event.recruitId,
        createTime:Date.parse(new Date())/1000 ,            //创建时间
        recruit:event.recruit,  //将招募信息存进来，避免连表查询（后面分页查询，不知道怎么同时连表查询）
        isWatch:true , //这个申请是否被产看过。 //默认查看过。暂时用缓存实现。
      }
    })
  }else if(parameter=='getApplicantByRecruitId'){ //根据 招募id查询 申请列表

    const MAX_LIMIT = 10  //一次查询3条数据
    const countResult = await db.collection('applicant').where({
      recruitId:event.recruitId
    }).count()  //计算有多少条数据
    const total = countResult.total    //得到表数据总数
    // 计算需要分几次 读取数据
    const batchTimes = Math.ceil(total / MAX_LIMIT)
    var tasks = [] //用来存放每次查询的结果
    for (let i = 0; i < batchTimes; i++) {
      await db.collection('applicant')
      .orderBy('createTime','desc') //根据创建时间降序排序
      .skip(i * MAX_LIMIT)  //跳过已经查询过的数据
      .limit(MAX_LIMIT)  //每次查询多少数据
      .where({
        recruitId:event.recruitId
      })
      .get()
      .then(res=>{
        // console.log('第'+(i+1)+'页',res)
        tasks = tasks.concat(res.data)
      })
    }
    // console.log(tasks)
    return tasks
  }else if(parameter=='getApplicantByUserId'){ //根据 用户id 和招募id 申请列表
    return db.collection('applicant').where({
      userId:wxContext.OPENID,
      recruitId:event.recruitId,
    }).get()
  }else if(parameter=='updateApplicationStatusById' ) { //根据 id 修改 状态
    return db.collection('applicant').where({
      _id: event.id
    })
    .update({
      data: {
        applicationStatus: event.status
      },
    })
  }else if(parameter=='removeApplicantByRecruitId' ) { //根据招募id进行删除
    return await db.collection('applicant')
    .where({
      recruitId:event.recruitId
    }).remove()
  }else if(parameter=='myJoinRecruitAll'){ //根据 userId查询 申请列表,在根据 招募id查询招募。 (连表查询,recruit 、applicant )
    return db.collection('applicant').aggregate()
    .lookup({
      from:'recruit',
      localField: 'recruitId',
			foreignField: '_id',
			as: 'recruit',
    })
    .match({
      userId:wxContext.OPENID
    })
    .end()
  }
 

}